Fix text replacement alist
authorjustbur <justin@burkett.cc>
Thu, 2 Jul 2015 23:08:15 +0000 (19:08 -0400)
committerjustbur <justin@burkett.cc>
Thu, 2 Jul 2015 23:09:11 +0000 (19:09 -0400)
which-key.el

index b59b1a74c700792acb008e885cbca154953279a2..d00f3c5421a3dcb2563e65f4b531433d82ec5561 100644 (file)
   '((">". "") ("<" . "") ("left" ."←") ("right" . "→"))
   "The strings in the car of each cons cell are replaced with the
   strings in the cdr for each key.")
-(defvar which-key-description-replacement-alist nil
+(defvar which-key-general-replacement-alist nil
   "See `which-key-key-replacement-alist'. This is a list of cons
-  cells for replacing the description of keys (usually the name
-  of the corresponding function).")
+  cells for replacing any text, keys and descriptions. You can
+  also use elisp regexp in the car of the cells.")
 (defvar which-key-buffer-name "*which-key*"
   "Name of which-key buffer.")
 (defvar which-key-buffer-position 'bottom
@@ -94,9 +94,13 @@ length."
 which is an alist where the car of each element is the text to
 replace and the cdr is the replacement text. "
   (dolist (rep replacements)
-    (save-excursion
-      (while (search-forward (car rep) nil t)
-        (replace-match (cdr rep) nil t)))))
+    (let ((trunc-car (which-key/truncate-description (car rep)))
+          old-face)
+      (save-excursion
+        (while (or (search-forward (car rep) nil t)
+                   (search-forward trunc-car nil t))
+          (setq old-face (get-text-property (match-beginning 0) 'face))
+          (replace-match (propertize (cdr rep) 'face old-face) nil t))))))
 
 (defun which-key/get-vertical-buffer-width (max-len-key max-len-desc)
   (min which-key-vertical-buffer-width (+ 3 max-len-desc max-len-key)))
@@ -152,11 +156,12 @@ Finally, show the buffer."
                                       unformatted)))
             (with-current-buffer (get-buffer which-key--buffer)
               (erase-buffer)
-              (setq vertical-buffer-width (which-key/get-vertical-buffer-width max-len-desc max-len-key)
+              (setq vertical-buffer-width
+                    (which-key/get-vertical-buffer-width max-len-desc max-len-key)
                     buffer-line-breaks
                     (which-key/insert-keys formatted (unless bottom-or-top vertical-buffer-width)))
               (goto-char (point-min))
-              (which-key/replace-strings-from-alist which-key-description-replacement-alist)
+              (which-key/replace-strings-from-alist which-key-general-replacement-alist)
               (if bottom-or-top
                   (setq buffer-height (+ 2 buffer-line-breaks))
                 (setq buffer-width vertical-buffer-width)))